标签: sql-server-2005

如何在SELECT FOR XML查询中选择返回的列名?

MS SQL有一个方便的解决方法,用于将多行的列值连接成一个值:

SELECT col1
 FROM table1
 WHERE col2 = 'x'
 ORDER by col3
 FOR XML path('')
Run Code Online (Sandbox Code Playgroud)

并返回一个很好的记录集:

XML_F52E2B61-18A1-11d1-B105-00805F49916B                                     
---------------------------------------- 
<col1>Foo</col1><col1>Bar</col1>
Run Code Online (Sandbox Code Playgroud)

只返回记录集中的列名是相当讨厌的!

列名似乎包含随机元素(或GUID),因此我不愿意在我的应用程序中使用它(不同的实例或不同的服务器可能有另一个GUID).不幸的是我无法使用*来选择值,并且由于现有应用程序中的限制,我无法迭代返回的列,或者......

有没有办法强制返回的记录集中的列名更合理?

xml sql sql-server sql-server-2005

48
推荐指数
2
解决办法
4万
查看次数

找不到列"dbo"或用户定义的函数或聚合"dbo.Splitfn",或者名称不明确

海家伙,

我使用了以下分割功能,

CREATE FUNCTION dbo.Splitfn(@String varchar(8000), @Delimiter char(1))       
returns @temptable TABLE (items varchar(8000))       
 as       
begin       
declare @idx int       
declare @slice varchar(8000)       

select @idx = 1       
    if len(@String)<1 or @String is null  return       

while @idx!= 0       
begin       
    set @idx = charindex(@Delimiter,@String)       
    if @idx!=0       
        set @slice = left(@String,@idx - 1)       
    else       
        set @slice = @String       

    if(len(@slice)>0)  
        insert into @temptable(Items) values(@slice)       

    set @String = right(@String,len(@String) - @idx)       
    if len(@String) = 0 break       
end   
return      

end  
Run Code Online (Sandbox Code Playgroud)

我在查询中使用了这个函数并执行了它

ALTER PROCEDURE [dbo].[Employees_Delete] 
-- Add the parameters …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005 user-defined-functions

48
推荐指数
4
解决办法
11万
查看次数

SQL中用于分割结果的十进制值

在SQL中,我有col1col2.两者都是整数.

我想这样做:

select col1/col2 from tbl1
Run Code Online (Sandbox Code Playgroud)

我得到的结果1col1=3col2=2

我想要的结果是 1.1

我说round(col1/col2,2).结果仍然是1.

我说decimal(col1/col2,2).小数不是在函数中构建的.

我怎么能完全得到1.1?

sql-server sql-server-2005

48
推荐指数
4
解决办法
17万
查看次数

如何从SQL Server 2005中的另一个表中的相应数据更新一个表中的数据

我在同一个数据库服务器上的不同数据库中有两个表.

两个数据库都具有相同的结构,但数据不同.Database1(Test1)是最新的,而database2(Test2)是数据库的旧副本.

  • Test1有一个名为Employee3000记录的表
  • Test2有一个名为Employee1000记录的表

我需要从Test2中的同一个表更新Test1中的表,以获取名为DeptID的特定列,因为Test2 DB(旧的)中Employee表中的值已更新.所以我需要从旧DB中的表中更新新DB中的表,该表具有大约1000行.

换句话说,我需要更新DeptIDEmployee表中Test1有我在任何值DB DeptIDEmployee在表Test2DB.

我知道我可以恢复数据库本身,但这不是解决方案.我需要从Test2数据库更新Test1数据库中的值.

sql-server-2005

48
推荐指数
2
解决办法
29万
查看次数

从函数执行存储过程

我知道这已被要求死亡,我知道为什么SQL Server不允许你这样做.

但除了使用扩展存储过程之外,还有其他解决方法吗?

请不要告诉我将我的功能转换为程序...

所以我真正要问的是:有没有办法从函数中运行存储过程?

编辑:

有点证明:有一种解决方法,但它是如此错误,我不会这样做.我要将其更改为存储过程并在其他地方执行.

sql sql-server stored-procedures sql-server-2005 user-defined-functions

48
推荐指数
2
解决办法
12万
查看次数

EXISTS vs JOIN和使用EXISTS子句

以下是代码示例:

CREATE TABLE #titles(
    title_id       varchar(20),
    title          varchar(80)       NOT NULL,
    type           char(12)          NOT NULL,
    pub_id         char(4)               NULL,
    price          money                 NULL,
    advance        money                 NULL,
    royalty        int                   NULL,
    ytd_sales      int                   NULL,
    notes          varchar(200)          NULL,
    pubdate        datetime          NOT NULL
 )
 GO

 insert #titles values ('1', 'Secrets',   'popular_comp', '1389', $20.00, $8000.00, 10, 4095,'Note 1','06/12/94')
 insert #titles values ('2', 'The',       'business',     '1389', $19.99, $5000.00, 10, 4095,'Note 2','06/12/91')
 insert #titles values ('3', 'Emotional', 'psychology',   '0736', $7.99,  $4000.00, 10, 3336,'Note 3','06/12/91')
 insert #titles values ('4', 'Prolonged', 'psychology', …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-server-2008

48
推荐指数
4
解决办法
8万
查看次数

计算SQL查询的执行时间?

我在我的网站上提供搜索功能,当用户搜索记录然后我想显示查询所用的时间以获得与谷歌相同的结果.当我们搜索任何内容时,谷歌会显示获得结果所需的时间吗?

为此我在我的SP中声明了一个@start变量,并在最后找到差异,如下所示;

DECLARE @start_time DATETIME

SET @start_time = GETDATE()

-- my query
SELECT * FROM @search_temp_table

SELECT RTRIM(CAST(DATEDIFF(MS, @start_time, GETDATE()) AS CHAR(10))) AS 'TimeTaken'
Run Code Online (Sandbox Code Playgroud)

有没有其他简单快捷的方法,或者单行查询,我们可以通过它查找执行查询的时间?

我正在使用SQL Server 2005.

sql sql-server-2005

47
推荐指数
6
解决办法
13万
查看次数

数据库中是否存在具有相同名称的约束?

这是我在这里问到的一个后续问题.

DB中的约束可以具有相同的名称吗?

说我有:

CREATE TABLE Employer
(
    EmployerCode    VARCHAR(20)    PRIMARY KEY,
    Address         VARCHAR(100)   NULL
)


CREATE TABLE Employee
(
    EmployeeID      INT            PRIMARY KEY,
    EmployerCode    VARCHAR(20)    NOT NULL,
    CONSTRAINT employer_code_fk FOREIGN KEY (EmployerCode) REFERENCES Employer
)


CREATE TABLE BankAccount
(
    BankAccountID   INT            PRIMARY KEY,
    EmployerCode    VARCHAR(20)    NOT NULL,
    Amount          MONEY          NOT NULL,
    CONSTRAINT employer_code_fk FOREIGN KEY (EmployerCode) REFERENCES Employer
)
Run Code Online (Sandbox Code Playgroud)

这是允许的吗?它取决于DBMS(我在SQL Server 2005上)吗?如果不允许,是否有人对如何解决它有任何建议?

sql t-sql sql-server sql-server-2005 constraints

47
推荐指数
4
解决办法
2万
查看次数

由于重复不存在而无法创建索引?

我在运行以下Transact-SQL命令时遇到错误:

CREATE UNIQUE NONCLUSTERED INDEX IX_TopicShortName
ON DimMeasureTopic(TopicShortName)
Run Code Online (Sandbox Code Playgroud)

错误是:

消息1505,级别16,状态1,行1 CREATE UNIQUE INDEX语句终止,因为找到了对象名称'dbo.DimMeasureTopic'和索引名称'IX_TopicShortName'的重复键.重复键值为().

当我运行SELECT * FROM sys.indexes WHERE name = 'IX_TopicShortName'SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimMeasureTopic]')IX_TopicShortName索引不显示时.所以似乎没有重复.

我在另一个数据库中有相同的模式,可以在那里创建没有问题的索引.任何想法为什么它不会在这里创造?

t-sql indexing sql-server-2005 unique-index

47
推荐指数
4
解决办法
5万
查看次数

从exec返回值(@sql)

我想从中获取值Exec(@sql)并分配给@Rowcount(int)

这是我的查询:

'SET @RowCount = (select count(*) 
                    FROM dbo.Comm_Services 
                   WHERE CompanyId = '+cast(@CompanyId as char)+' and '+@condition+')'
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005

46
推荐指数
1
解决办法
12万
查看次数