Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all 7251 articles
Browse latest View live

Есть ли доступ к таблице

$
0
0
Здравствуйте !
Есть хранимая процедура, которая собирает данные с нескольких таблиц. У некоторых пользователей нет доступа к некоторым таблицам (то ли через роли, то ли напрямую).
Подскажите пожалуйста, как узнать в хранимке для текущего пользователя (или для произвольного пользователя) есть ли доступ (на выборку) к той или иной таблице.

Как определить кодировку файла sql ?

$
0
0
Как определить кодировку файла sql ?

Не пашет QA на Win10 (64)

$
0
0
Сорри за оффтоп.
Волею судьбы приходится работать на Вин10 (64).
Не работает сабж... :(
Пишет

isqlw.exe
Порядковый номер 1 не найден в библиотеке DLL C:\Windows\SYSTEM32\SQLWID.dll.
Порядковый номер 1 не найден в библиотеке DLL C:\Windows\SYSTEM32\SQLWOA.dll.
Порядковый номер 1 не найден в библиотеке DLL C:\Windows\SYSTEM32\SQLUNIRL.dll.

Сами ДЛЛ в папке есть.
Чо делоть ?

Можно ли использовать результат функции для передачи в переменную хранимой процедуры?

$
0
0
Добрый день.

Есть функция, у которой возвращаемый результат INT:
  [dbo].[test_function]()


Почему-то не получается её использовать напрямую (без объявления переменной) передавая в параметр хранимой процедуры:

  EXECUTE [test_proc] @TestParam = [dbo].[test_function]()


Существуют ограничения?

Непонятная ошибка

$
0
0
Добрый день!

WHILE @@FETCH_STATUS = 0
BEGIN
........
END;


на ; ругается "неверный синтаксис около ; ожидается CONVERSATION"

К сервис брокер скрипт не имеет никакого отношения, обычный курсор

Если точку с запятой убрать, ругается на следующий оператор
CLOSE <имя курсора>;


"неверный синтаксис около CLOSE ожидается CONVERSATION"

Что -то не так?

отладка CLR

$
0
0
День добрый!
Пытаюсь научиться пользоваться функциями CLR.
в наличии:
*Локальный SQL Server(вероятно экспресс)
*студия 2013 (в полном фарше)
*пример Dll написан\скомпилирован\подключен к sql server, функция запускается, но выдает ошибку и падает, хочу разобраться в причинах в режиме отладки.

все делаю по феншую, открываю проект, подключаю локальный сервер(все вижу. базы,таблицы),руками прописываю сборку и функцию для вызова CLR функции, все видно как SSMS так и в VS2013, запускаю отладку(формируется скрипт) и при попытке подключения к серверу получаю сообщение:

Unable to debug .NET code. Could not attach to SQL Server process on

что я делаю не так?

подскажите пожалуйста!

Подключить локальную справку в SQL Server Management Studio (SSMS 2016)

$
0
0
Скачал последний SSMS (2016)
Справка открывается естественно в браузере, нужен интернет. 
В меню Спарвка->"Добавление и удаление содержимого справки" открывается HelpViewer в котором выбираю справочные материалы для загрузки, устанавливаю.
Все равно справка открывается в браузере.
Как подключить локальные справочные материалы? В предыдущих версиях (до 2008) все работало отлично. С 2012 версии всё, больше нет локальной справки?
Ни где в руководствах нет описания, как подключить.
В меню Сервис->Параметры нет ни одного пункта про использование справки, как было в прежних версиях SSMS.

Соответствие английских и русских названий счетчиков производительности

$
0
0
Добрый день.
Где бы найти русский аналог для английских названий счетчиков (например, Buffer cache hit ratio или Page Life Expectancy). Столкнулся с "русифицированной" Windows 2012+sql2014 - названия счетчиков по-русски, где какой найти не понимаю.

Репорты

$
0
0
Доброго времени суток.
Есть SQL Server 2008 на котором стоят Reporting Services.
Там сделано много репортов, которые показывают самую разную инфу с других SQL серверов.
Для некоторых репортов включено Store all report execution snapshots in history.
Все работает, проблем нет.
Однако интересует такой вопрос - есть ли какая то возможность смотреть содерживое этих снапшотов не через веб?
Ну т.е. могу я это содержимое увидеть в каком то файле на диске или выбрать из какой то таблицы в базе?
Все таблицы в базе пересмотрел, в каком то явном виде информацию не нашел.

Запрос

$
0
0
Подскажите, у меня первый запрос удаляет все записи, а второй добавляет, а я хочу сделать так что бы он просто не трогал те записи которые добавляю во втором запросе, что бы с первого раза они не удалялись :)


UPDATE Actors
SET   Author = 1, [Status] = -3, Received = GETDATE() 
FROM ContractFull C
INNER JOIN ContractFullLawForm C1 on C.lawForm = C1.LawID
INNER JOIN Actors A ON /* A.Name = (C.Firm + ' ' + C1.LawForm) --AND  */C.ID <> A.Actor
WHERE C.Archive = -1 AND A.ItemID IN (7,25,26,27,28,29,30,31,32,33,34,35,36,47) AND C.Approval IN (4,7) AND A.[Status] > 0


UPDATE Actors
SET   Author = 1, [Status] = 1,     Received = GETDATE()
FROM ContractFull C
INNER JOIN Actors A ON A.Actor = C.ID
WHERE C.Archive = -1 AND c.Approval IN (4,7) AND A.[Status] < 0

Поменять имя резервной копии во время копирования, можно ли?

$
0
0
День добрый,
Есть такая задача:
На сервере S_1 раз в день происходит резервное копирование базы, файл сохраняется как скажем MyDB_YYYMMDD.bak
Нужно создать JOB, который в определенное время будет копировать этот файл на другой сервер S_2, но чтоб в результате имя файла на S_2 было MyDB.bak.
При этом нельзя помянять имя файла на S_1.
Можно это сделать средствами SQL или нужно искать другое решение?
Спасибо!

Неожиданный результат

$
0
0
Привет всем.
Может кто знает, почему результаты выборок - разные?
declare @R table (x int)
declare @R2 table (x int)

insert into @R(x)
Values (0),(1),(2),(3);

insert into @R2(x)
Values (5),(1),(2),(3);

select l.x, r.x x2,coalesce(l.x,r.x) ,coalesce(r.x,l.x)
from @R l full join @r2 r on l.x = r.x
where coalesce(l.x,r.x) = coalesce(r.x,l.x)

select l.x, r.x x2,coalesce(l.x,r.x) ,coalesce(r.x,l.x)
from @R l, @r2 r
where coalesce(l.x,r.x) = coalesce(r.x,l.x)

user1.Table1

$
0
0
добрый день.
Извините если мой вопрос будет смешной.
Я хочу создать таблицу (проселура, View) но чтобы перед таблицем (проселура, View) не указан dbo. а имя юзера. Например.

User1.Table1
User1.Table2

User1.View1
User1.View2

И когда юзер заходит систем своим login тогда он работал только своим таблицами (проселурами, View)


заранее благодарен за ответ

Восстановление из резервной копии. Пропали заголовки

$
0
0
Добрый день!

Ситуация следующая:
MS SQL 2008 R2 (ОС win server 2008). Была вручную создана полная копия БД, сохранена на локальный диск.
Затем по ftp файл бэкапа был залит на unix сервер, далее снова скачан на win сервер. При попытке развернуть базу из бэкапа ошибка object cannot be cast from dbnull to other types. (mscorlib)
RESTORE VERIFYONLY выдает ошибку.
Выполнил RESTORE HEADERONLY from disk='<file>'; оказалось, что backup name *** incomplete ***, остальные поля значение Null
При детальном изучении оказалось, что в момент первого залива по фтп на unix сервер у filezill'ы стоял режим передачи "авто" при котором произошло преобразование файла, а именно изменился формат переноса строк (CR, LF) и изменился размер файла.

условно было:
lenght: 2382336
lines: 5622

стало
lenght: 23822424
lines: 2874

Манипуляции с изменением формата переноса строки через notepad++ результата не дали. Вернуть файл к исходному размеру так же не получается.

У кого-нибудь есть идеи как можно достать данные из такого бэкапа?

Когда использовать WITH (NOLOCK)?

$
0
0
Документацию читал, но:
1. Когда следует использовать WITH (NOLOCK)?
2. Когда не следует использовать WITH (NOLOCK)?
Просьба отвечать своими словами, а не кидать ссылки столетней давности.

Построить Order

$
0
0
Прошу помощи в коде.

Тестовый код:

 create table #test (f1 int)
go

insert into #test 
select 1
union 
select 2
union 
select null
union all
select null

go

select 
f1,
cast(ROW_NUMBER ( ) OVER ( Order by #test.f1 ) as Int)
as nOrder
from #test 

go

drop table #test


Необходимо упорядочить по полю f1, что бы записи шли следующим образом:

f1 nOrder
1 1
2 2
null 3
null 4

SqlXmlBulkLoad

$
0
0
Доброго времени суток,

Решил помучать sqlxmlbulkload.

Задача следующего типа: есть таблица
CREATE TABLE tbl_test (
      [rowID] INT IDENTITY(1,1),
      [FileName] VARCHAR(50),
      [File_ID] INT,
      [File_Version] VARCHAR(50),
      [Recepient] VARCHAR(50),
      [Record_ID] INT,
      [Path] VARCHAR(255)
)


есть файлик xml:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<ROOT>
  <FileName>DB_01.dbf</FileName>
  <FileData>
    <ID>1</ID>
    <Version>4.0</Version>
  </FileData>
  <Details Recepient="test">
    <Record ID="1">
      <Path>C:\</Path>
    </Record>
    <Record ID="2">
      <Path>C:\temp\</Path>
    </Record>
  </Details>
</ROOT>


его необходимо загрузить средствами sqlxmlbulkload в виде списка строк: аля
 insert into tbl_test ([FileName], [File_ID], [File_Version], [Recepient], [Record_ID], [Record_Path])
   values ('DB_01.dbf', 1, '4.0', 'test', 1, 'C:\'), ('DB_01.dbf', 1, '4.0', 'test', 2, 'C:\temp')

и.т.д.

и вот здесь ступил на грабли, что-то не пойму средство загрузки не умеет дублировать строки что-ли с значениями предыдущих обработанный узлов xml

Схему нарисовал в таком виде:
<?xml version="1.0" encoding="WINDOWS-1251"?>
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xs:element name="ROOT" sql:relation="tbl_test">
    <xs:complexType>
      <xs:sequence>
         <xs:element name="FileName" sql:field="FileName"/>
         <xs:element name="FileData" sql:is-constant="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element name="ID" sql:field="File_ID"/>
                  <xs:element name="Version" sql:field="File_Version"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Details">
            <xs:complexType>
                <xs:sequence>
                  <xs:element name="Record">
                     <xs:complexType>
                       <xs:sequence>
                           <xs:element name="Path" sql:field="Path"/>
                       </xs:sequence>
                       <xs:attribute name="ID" sql:field="Record_ID"/>
                     </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="Recepient" sql:field="Recepient"/>
            </xs:complexType>
         </xs:element>
      </xs:sequence>                 
    </xs:complexType>
  </xs:element>
</xs:schema>


Но при загрузке получаю ошибку: Shema: relationship expected on 'Details'
Я бы мог прикрутить туда связку таблицы на саму же себя, но тогда загружается несколько строк в виде:
строка 1: (есть значения до полей тега "Details" и NULL после)
строка 2: (значения null до полей тега "Details" и есть значения после)

Пошел пока гуглить, где то я видимо не дочитал факинг мануал

По инлайн функции подскажите, пожалуйста.

$
0
0
Есть 2008 SQL сервер, экспресс. Есть несколько баз с одинаковыми по структуре таблицами. В таблицах есть индексы.
Есть вьюха, которая позволяет делать селекты сразу из всех баз, типа такой:
CREATE VIEW [dbo].[clog]
AS
SELECT     *
FROM         store2012.dbo.plog
UNION ALL
SELECT     *
FROM         store2013.dbo.plog
GO

Индексы в такой схеме не работают. Индексировать такую вьюху нельзя, ибо несколько баз. Поискал возможность указать явно необходимость использовать индексы в такой ситуации, не нашел.
Хочу сделать условную выборку данных, так чтоб при определенном диапазоне дат выполнялся явный селект из таблицы известной базы. В обычной инлайн-функции нельзя использовать условия. В многооператорной инлайн-функции создается временная таблица, я хотел бы этого избежать, ибо данных запрашиваться может много.
Что делать?

Распределенный сервер SQL

$
0
0
День добрый.
Я тут новенький и пришел к вам из 1С.
И сразу (возможно нубский) вопрос - есть ли распределенные сервера SQL?
Ну тоесть, несколько серверов SQL на разных физических машинах обслуживают одну базу для повышения масштабируемости?

Замена\объединение индексов на работающей системе

$
0
0
Привет!
Подскажите, пожалуйста, есть задача по объединению\оптимизации индексов. Довольно большая таблица, она есть на нескольких серверах с данными разных компаний (разные клиенты на разных серверах хранятся). Для примерна на одном из серверов в таблице более 600 млн. строк. На таблице есть 2 больших индекса с include. При этом dba жалуется, что некоторые процедуры при использовании этих индексов вызывают загрузку ЦПУ до 90%, если он перекомпилирует процедуру, то она использует кластерный индекс и загрузка ЦПУ падает до 15%.
Я нашла вот этот пост, который позволяет выбрать процедуры из планов в кэше, чтобы определить какие процедуры сейчас используют эти индексы.
[url=]https://www.sqlskills.com/blogs/jonathan/finding-what-queries-in-the-plan-cache-use-a-specific-index/[/url]

Вот скрипт, который используется
CREATE PROCEDURE spGetPlanUsingIndex
	@indexName NVARCHAR(128)
AS
BEGIN	
	SET NOCOUNT ON;

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 	

	-- Make sure the name passed is appropriately quoted 
	IF (LEFT(@IndexName, 1) <> '[' AND RIGHT(@IndexName, 1) <> ']') SET @IndexName = QUOTENAME(@IndexName); 

	WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
	INSERT INTO [dbo].[LogDataFileIndexUsage]
	(
		DBName,
		SPname, 
		ScanCount,
		SeekCount,
		UpdateCount,
		RefCount,
		UseCount,
		QueryPlan,
		IndexName
	)
	SELECT
		DB_NAME(E.dbid) AS [DBName],
		object_name(E.objectid, dbid) AS [ObjectName],
		E.query_plan.value('count(//RelOp[@LogicalOp = ''Index Scan'' or @LogicalOp = ''Clustered Index Scan'']/*/Object[@Index=sql:variable("@IndexName")])','int')  AS [ScanCount],
		E.query_plan.value('count(//RelOp[@LogicalOp = ''Index Seek'' or @LogicalOp = ''Clustered Index Seek'']/*/Object[@Index=sql:variable("@IndexName")])','int')  AS [SeekCount],
		E.query_plan.value('count(//Update/Object[@Index=sql:variable("@IndexName")])','int') AS [UpdateCount],	
		P.refcounts AS [RefCounts],
		P.usecounts AS [UseCounts],
		E.query_plan AS [QueryPlan],
		@IndexName
	FROM sys.dm_exec_cached_plans P
	CROSS APPLY sys.dm_exec_query_plan(P.plan_handle) E
	WHERE	
		E.query_plan.exist('//*[@Index=sql:variable("@IndexName")]') = 1
	OPTION(MAXDOP 1, RECOMPILE);
END


Кроме того попросила дать информацию о missing index на сервере. Список процедур получился небольшим – 10, что интересно одна и та же процедура могла использовать то один индекс то другой. На сервере включен ассинхронный режим обновления статистики. Я выбрала в каких запросах используются эти индексы в процедурах по планам из кэша, и собрала список полей, указанных в SELECT, WHERE и JOIN. А также поля , которые использовались как seek предикаты. Сделала один индекс без include полей, при тестировании вижу такую картину – его использует меньшее число процедур, но скорость работы примерно та же. Я ожидала, что вырастет загрузка CPU, но нет – все ок.
Я понимаю, что убирая include – нужно будет делать Key Lookup чтобы довыбрать нужные поля из таблицы, при анализе плана – можно видеть, что план со старым индексом несколько лучше. Но если изменения позволят сэкономить место + избавят от внезапного изменения загрузки по ЦПУ, то их стоит применить.
Буду благодарна, если поделитесь своими мыслями\опытом решения такой задачи.
Viewing all 7251 articles
Browse latest View live